package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// UserInfo 用户信息
type UserInfo struct {
	ID     uint `gorm:"primaryKey"`
	Name   string
	Gender string
	Hobby  string
}

func main() {
	dsn := "root:yjx020613@tcp(192.168.126.91:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}
	defer func() {
		sqlDB, _ := db.DB()
		sqlDB.Close()
	}()

	// 自动迁移
	if err := db.AutoMigrate(&UserInfo{}); err != nil {
		panic(err)
	}

	u1 := UserInfo{Name: "七米", Gender: "男", Hobby: "篮球"}
	u2 := UserInfo{Name: "沙河娜扎", Gender: "女", Hobby: "足球"}
	// 创建记录
	if err := db.Create(&u1).Error; err != nil {
		fmt.Println("创建记录 u1 失败:", err)
	}
	if err := db.Create(&u2).Error; err != nil {
		fmt.Println("创建记录 u2 失败:", err)
	}
	// 查询
	var u UserInfo
	if err := db.First(&u).Error; err != nil {
		fmt.Println("查询第一条记录失败:", err)
	} else {
		fmt.Printf("%#v\n", u)
	}

	var uu UserInfo
	if err := db.Where("hobby = ?", "足球").First(&uu).Error; err != nil {
		fmt.Println("查询爱好为足球的记录失败:", err)
	} else {
		fmt.Printf("%#v\n", uu)
	}

	// 更新
	if err := db.Model(&u).Update("hobby", "双色球").Error; err != nil {
		fmt.Println("更新记录失败:", err)
	}

	// 删除
	if err := db.Delete(&u).Error; err != nil {
		fmt.Println("删除记录失败:", err)
	}
}
